#ifndef GOOLNN_CANGYAN_WINDOW_WINDOW
#define GOOLNN_CANGYAN_WINDOW_WINDOW

#include <QLocalSocket>
#include <QLocalServer>
#include <QPaintEvent>
#include <QMainWindow>
#include <QCloseEvent>
#include <QMenuBar>
#include <QImage>
#include <QMenu>

#include "window/NewFile.hpp"
#include "file/CYFile.hpp"

class Window : public QMainWindow{
    Q_OBJECT

    private:
        QMenuBar* menuBar;                              // 菜单

        QMenu* fileMenu;                                // 文件
        QMenu* editMenu;                                // 编辑
        QMenu* selectionMenu;                           // 选择
        QMenu* viewMenu;                                // 视图
        QMenu* helpMenu;                                // 帮助

        QAction* newAction;                             // 新建文件
        QAction* openAction;                            // 打开文件
        QAction* saveAction;                            // 保存文件
        QAction* saveAllAction;                         // 保存全部
        QAction* closeAction;                           // 关闭文件
        QAction* informationAction;                     // 文件信息
        QAction* imagesListAction;                      // 图像列表
        QAction* exitAction;                            // 退出程序

        QAction* previousPageAction;                    // 上一页
        QAction* nextPageAction;                        // 下一页
        QAction* addNoteAction;                         // 添加注释
        QAction* removeNoteAction;                      // 删除注释
        // QAction* undoAction;        //撤销
        // QAction* redoAction;        //重做
        // QAction* cutAction;         //剪切
        // QAction* copyAction;        //复制
        // QAction* pasteAction;       //粘贴

        QAction* selectPreviousNoteAction;              // 选中上一个注释
        QAction* selectNextNoteAction;                  // 选中下一个注释
        QAction* selectAndLocatePreviousNoteAction;     // 选中并定位上一个注释
        QAction* selectAndLocateNextNoteAction;         // 选中并定位下一个注释
        QAction* locateSelectedNoteAction;              // 定位选中的注释

        QAction* zoomInAction;                          // 图像放大
        QAction* zoomOutAction;                         // 图像缩小
        QAction* viewResetAction;                       // 图像重置
        QAction* topWindowAction;                       // 置顶窗口

        QAction* checkUpdateAction;                     // 检查更新
        QAction* aboutAction;                           // 关于

        QTabWidget* tabWidget;      //选项卡控件

        QImage* logo;               // 汉化组徽标

        QLocalServer* server;       // 本地服务器

    public:
        Window(QStringList filepaths, QLocalServer* server);
        ~Window();
    
    private:
        void updateAction();

    protected:
        void paintEvent(QPaintEvent*);

        void mouseDoubleClickEvent(QMouseEvent*);

        void dragEnterEvent(QDragEnterEvent* event);
        void dropEvent(QDropEvent* event);

        void closeEvent(QCloseEvent* event);
    
    private slots:
        void newFile();
        void openFile();
        void saveFile();
        void saveAllFiles();
        void closeView();
        void fileInformation();
        void imagesList();

        // void previousPage();
        // void nextPage();
        // void addNote();
        // void removeNote();

        // void selectPreviousNote();
        // void selectNextNote();
        // void selectAndLocatePreviousNote();
        // void selectAndLocateNextNote();
        // void locateSelectedNote();

        // void zoomIn();
        // void zoomOut();
        // void viewReset();
        void topWindow();

        // void checkUpdate();
        void about();

        void fileSaved();
        void fileChanged();

        void addTab(CYFile* file);
        void removeTab(int index);

        void newConnection();

        void currentChanged(int index);

        void pageChanged();
        void focusChanged();
        void adding();
        void added();
    
};

#endif
